home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / programm.ing / m2gem106.lzh / CRYSTAL1.06 / TST / MEMORY / MEMORYDE.M2 next >
Encoding:
Text File  |  1993-07-23  |  2.8 KB  |  104 lines

  1. MODULE MemoryDevice;
  2.  
  3. (* UK 14.7.93 *)
  4.  
  5. FROM ApplMgr    IMPORT ApplInit,ApplExit;
  6. FROM EvntMgr    IMPORT EvntKeybd,ScanWord;
  7. FROM FormMgr    IMPORT FormAlert;
  8. FROM VDI        IMPORT XY,White,Black;
  9. FROM VControl   IMPORT Memory,RC,MaxWorkIn,MaxWorkOut,
  10.                        VOpnWk,VClsWk,VUpdWk,VClrWk,VSClip;
  11. FROM VAttribute IMPORT VSFColor,VSFPerimeter;
  12. FROM VOutput    IMPORT VCircle;
  13. FROM VRaster    IMPORT MFDB,SOnly,VROCpyFm,VRTCpyFm,VRTrnFm,WritingModes;
  14. FROM WindTool   IMPORT BeginUpdate,EndUpdate;
  15. FROM GrafTool   IMPORT ShowMouse,HideMouse;
  16. FROM VDITool    IMPORT OpenVWork,CloseVWork;
  17. FROM PORTAB     IMPORT UNSIGNEDWORD,ANYPOINTER,NULL;
  18. FROM INTRINSIC  IMPORT VOID,PTR;
  19.  
  20. CONST OffScreen = 90; (* reserviert für OffScreen *)
  21.  
  22. PROCEDURE DoCopy(Work: UNSIGNEDWORD);
  23.  
  24. VAR ScreenHandle: UNSIGNEDWORD;
  25.     MemoryHandle: UNSIGNEDWORD;
  26.     i           : [0..(MaxWorkIn - 1)];
  27.     WorkIn      : ARRAY[0..(MaxWorkIn - 1)] OF UNSIGNEDWORD;
  28.     WorkOut     : ARRAY[0..(MaxWorkOut - 1)] OF UNSIGNEDWORD;
  29.     PXY         : ARRAY[0..7] OF XY;
  30.     Source      : MFDB;
  31.     Destination : MFDB;
  32.     Key         : ScanWord;
  33.     Button      : UNSIGNEDWORD;
  34.     AlertString : ARRAY[0..255] OF CHAR;
  35.  
  36. BEGIN
  37.     BeginUpdate;
  38.     IF OpenVWork(ScreenHandle) THEN
  39.  
  40.       FOR i:= 1 TO (MaxWorkIn - 1) DO
  41.         WorkIn[i]:= 1;
  42.       END;
  43.  
  44.       WorkIn[0]:= Work;
  45.       WorkIn[10]:= RC;
  46.  
  47.       Source.FDAddr:= NULL; (* für OffScreen *)
  48.       Source.FDNPlanes:= 0; (* für OffScreen *)
  49.  
  50.       (* Öffne "Speicherbildschirm" mit 1280 x 960 Pixeln *)
  51.  
  52.       VOpnWk(WorkIn,1279,959,MemoryHandle,WorkOut,Source);
  53.  
  54.       IF MemoryHandle > 0 THEN
  55.         VSClip(MemoryHandle,FALSE,PXY);
  56.         VSFColor(MemoryHandle,Black);
  57.         VSFPerimeter(MemoryHandle,TRUE);
  58.         VCircle(MemoryHandle,50,50,50);
  59.  
  60.         WITH Source DO (* bei OffScreen kann dieser WITH Block entfallen *)
  61.           FDW:= 1280;
  62.           FDH:= 960;
  63.           FDWdWidth:= 80; (* 1280 DIV 16 *)
  64.           FDStand:= TRUE;
  65.           FDNPlanes:= 1;
  66.         END;
  67.  
  68.         Destination.FDAddr:= NULL;
  69.  
  70.         PXY[0]:= 0;
  71.         PXY[1]:= 0;
  72.         PXY[2]:= 99;
  73.         PXY[3]:= 99;
  74.  
  75.         PXY[4]:= 0;
  76.         PXY[5]:= 0;
  77.         PXY[6]:= 99;
  78.         PXY[7]:= 99;
  79.  
  80.         HideMouse;
  81.         VSClip(ScreenHandle,FALSE,PXY);
  82.         VRTCpyFm(ScreenHandle,MdReplace,PXY,Source,Destination,Black,White);
  83.         VClsWk(MemoryHandle);
  84.         ShowMouse;
  85.       ELSE
  86.         AlertString:= "[1][| Fehler! |][Abbruch]";
  87.         Button:= FormAlert(1,PTR(AlertString));
  88.       END;
  89.  
  90.       Key:= EvntKeybd();
  91.  
  92.       CloseVWork(ScreenHandle);
  93.     END;
  94.     EndUpdate;
  95. END DoCopy;
  96.  
  97. BEGIN
  98.   IF ApplInit() >= 0 THEN
  99.     DoCopy(Memory);
  100.     DoCopy(OffScreen);
  101.     ApplExit;
  102.   END;
  103. END MemoryDevice.
  104.